<!DOCTYPE html>
<html>
<head><meta name="generator" content="Hexo 3.8.0">
  <meta charset="utf-8">
  <title>Linux下按键精灵xdotool | JiaHan&#39;s Notes</title>
  <meta name="keywords" content=" Linux , xdotool ">
  <meta name="description" content="Linux下按键精灵xdotool | JiaHan&#39;s Notes">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="description" content="名称xdotool  - 命令行X11自动化工具 描述xdotool允许您以编程方式（或手动）模拟键盘输入和鼠标活动，移动和调整窗口大小等。它使用X11的XTEST扩展和其他Xlib函数来完成此操作。">
<meta name="keywords" content="Linux,xdotool">
<meta property="og:type" content="article">
<meta property="og:title" content="Linux下按键精灵xdotool">
<meta property="og:url" content="https://jia_han.gitee.io/2019/03/21/xdotool/index.html">
<meta property="og:site_name" content="JiaHan&#39;s Notes">
<meta property="og:description" content="名称xdotool  - 命令行X11自动化工具 描述xdotool允许您以编程方式（或手动）模拟键盘输入和鼠标活动，移动和调整窗口大小等。它使用X11的XTEST扩展和其他Xlib函数来完成此操作。">
<meta property="og:locale" content="zh-Hans">
<meta property="og:updated_time" content="2019-11-12T02:21:04.809Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Linux下按键精灵xdotool">
<meta name="twitter:description" content="名称xdotool  - 命令行X11自动化工具 描述xdotool允许您以编程方式（或手动）模拟键盘输入和鼠标活动，移动和调整窗口大小等。它使用X11的XTEST扩展和其他Xlib函数来完成此操作。">


<link rel="icon" href="/img/avatar.png">

<link href="/css/style.css?v=1.0.1" rel="stylesheet">

<link href="/css/hl_theme/atom-light.css?v=1.0.1" rel="stylesheet">

<link href="//cdn.bootcss.com/animate.css/3.5.2/animate.min.css" rel="stylesheet">
<link href="//cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">

<script src="//cdn.bootcss.com/jquery/2.2.4/jquery.min.js"></script>
<script src="/js/jquery.autocomplete.min.js?v=1.0.1"></script>

<script src="//cdn.bootcss.com/highlight.js/9.12.0/highlight.min.js"></script>
<script>
    hljs.initHighlightingOnLoad();
</script>

<script src="//cdn.bootcss.com/nprogress/0.2.0/nprogress.min.js"></script>



<script src="//cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>

<script src="/js/iconfont.js?v=1.0.1"></script>

</head>
<div style="display: none">
  <input class="theme_disqus_on" value="false">
  <input class="theme_preload_comment" value="false">
  <input class="theme_blog_path" value>
</div>

<body>
<aside class="nav">
    <div class="nav-left">
        <a href="/" class="avatar_target">
    <img class="avatar" src="/img/avatar.png">
</a>
<div class="author">
    <span>Jia Han</span>
</div>

<div class="icon">
    
        
        <a title="github" href="https://github.com/jia_han" target="_blank">
            
                <svg class="iconfont-svg" aria-hidden="true">
                    <use xlink:href="#icon-github"/>
                </svg>
            
        </a>
        
    
        
    
        
    
        
    
        
    
        
        <a title="weibo" href="https://weibo.com/u/6200025046" target="_blank">
            
                <svg class="iconfont-svg" aria-hidden="true">
                    <use xlink:href="#icon-weibo"/>
                </svg>
            
        </a>
        
    
        
    
        
    
        
    
        
        <a title="oschina" href="https://my.oschina.net/u/3252136" target="_blank">
            
                <svg class="iconfont-svg" aria-hidden="true">
                    <use xlink:href="#icon-oschina"/>
                </svg>
            
        </a>
        
    
        
    
        
        <a title="email" href="mailto:jh_jiahan@163.com" target="_blank">
            
                <svg class="iconfont-svg" aria-hidden="true">
                    <use xlink:href="#icon-email"/>
                </svg>
            
        </a>
        
    
        
        <a title="qq" href="http://wpa.qq.com/msgrd?v=3&uin=2554151483&site=qq&menu=yes" target="_blank">
            
                <svg class="iconfont-svg" aria-hidden="true">
                    <use xlink:href="#icon-qq"/>
                </svg>
            
        </a>
        
    
        
        <a title="neteasemusic" href="https://music.163.com/" target="_blank">
            
                <svg class="iconfont-svg" aria-hidden="true">
                    <use xlink:href="#icon-neteasemusic"/>
                </svg>
            
        </a>
        
    
</div>




<ul>
    <li><div class="all active">全部文章<small>(3)</small></div></li>
    
        
            
            <li><div data-rel="开发"><i class="fold iconfont icon-right"></i>开发<small>(0)</small></div>
                
                    <ul class="sub hide">
                        
                        <li><div data-rel="测试"><i class="fold iconfont icon-right"></i>测试<small>(0)</small></div>
                            
                                <ul class="sub hide">
                                    
                                    <li><div data-rel="系统">系统<small>(0)</small></div>
                                    </li>
                                    
                                </ul>
                            
                        </li>
                            
                    </ul>
                
            </li>
            
        
    
        
            
        
    
        
            
        
    
        
            
            <li><div data-rel="系统">系统<small>(2)</small></div>
                
            </li>
            
        
    
        
            
            <li><div data-rel="Python">Python<small>(1)</small></div>
                
            </li>
            
        
    
</ul>
<div class="left-bottom">
    <div class="menus">
    
    
    
    
    </div>
    <div><a class="about  hasFriend  site_url" href="/about">关于</a><a style="width: 50%" class="friends">友链</a></div>
</div>
<input type="hidden" id="yelog_site_posts_number" value="3">

<div style="display: none">
    <span id="busuanzi_value_site_uv"></span>
    <span id="busuanzi_value_site_pv"></span>
</div>

    </div>
    <div class="nav-right">
        <div class="friends-area">
    <div class="friends-title">
        友情链接
        <i class="back-title-list"></i>
    </div>
    <div class="friends-content">
        <ul>
            
            <li><a target="_blank" href="http://yelog.org/">叶落阁</a></li>
            
        </ul>
    </div>
</div>
        <div class="title-list">
    <form onkeydown="if(event.keyCode==13){return false;}">
        <input class="search" type="text" placeholder="Search..." autocomplete="off" id="local-search-input">
        <i class="cross"></i>
        <span>
            <label for="tagswitch">Tags:</label>
            <input id="tagswitch" type="checkbox" style="display: none">
            <i id="tagsWitchIcon"></i>
        </span>
    </form>
    <div class="tags-list">
    
    <li class="article-tag-list-item">
        <a href="javascript:" class="color1">Linux</a>
    </li>
    
    <li class="article-tag-list-item">
        <a href="javascript:" class="color3">xdotool</a>
    </li>
    
    <div class="clearfix"></div>
</div>

    
    <nav id="title-list-nav">
        
        <a class="Python " href="/jia_han/2019/03/21/tkinter/" data-tag data-author>
            <span class="post-title" title="tkinter简单实用">tkinter简单实用</span>
            <span class="post-date" title="2019-03-21 16:57:46">2019/03/21</span>
        </a>
        
        <a class="系统 " href="/jia_han/2019/03/21/ssh/" data-tag data-author>
            <span class="post-title" title="SSH连接交换机慢">SSH连接交换机慢</span>
            <span class="post-date" title="2019-03-21 16:57:46">2019/03/21</span>
        </a>
        
        <a class="系统 " href="/jia_han/2019/03/21/xdotool/" data-tag="Linux,xdotool" data-author>
            <span class="post-title" title="Linux下按键精灵xdotool">Linux下按键精灵xdotool</span>
            <span class="post-date" title="2019-03-21 16:57:46">2019/03/21</span>
        </a>
        
    </nav>
</div>
    </div>
    <div class="hide-list">
        <div class="semicircle">
            <div class="brackets first"><</div>
            <div class="brackets">&gt;</div>
        </div>
    </div>
</aside>
<div class="post">
    <div class="pjax">
        <article id="post-xdotool" class="article article-type-post" itemscope itemprop="blogPost">
    
        <h1 class="article-title">Linux下按键精灵xdotool</h1>
    
    <div class="article-meta">
        
        
        
        <span class="book">
            
                <a href="javascript:" data-rel="系统">系统</a>
            
        </span>
        
        
        <span class="tag">
            
            <a href="javascript:" class="color1">Linux</a>
            
            <a href="javascript:" class="color3">xdotool</a>
            
        </span>
        
    </div>
    <div class="article-meta">
        
        创建时间:<time class="date" title="更新时间: 2019-11-12 10:21:04">2019-03-21 16:57</time>
        
    </div>
    <div class="article-meta">
        
        
        <span id="busuanzi_container_page_pv">
            阅读:<span id="busuanzi_value_page_pv">
                <span class="count-comment">
                    <span class="spinner">
                      <div class="cube1"></div>
                      <div class="cube2"></div>
                    </span>
                </span>
            </span>
        </span>
        
        
    </div>
    
    <div class="toc-ref">
    
        <ol class="toc"><li class="toc-item toc-level-3"><a class="toc-link" href="#名称"><span class="toc-text">名称</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#描述"><span class="toc-text">描述</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#键盘命令"><span class="toc-text">键盘命令</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#鼠标命令"><span class="toc-text">鼠标命令</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#窗口命令"><span class="toc-text">窗口命令</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#桌面和窗口命令"><span class="toc-text">桌面和窗口命令</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#其他命令"><span class="toc-text">其他命令</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#SCRIPTS"><span class="toc-text">SCRIPTS</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#CLEARMODIFIERS"><span class="toc-text">CLEARMODIFIERS</span></a></li></ol>
    
<style>
    .left-col .switch-btn,
    .left-col .switch-area {
        display: none;
    }
    .toc-level-3 i,
    .toc-level-3 ol {
        display: none !important;
    }
</style>
</div>
    
    <div class="article-entry" itemprop="articleBody">
      
        <h3 id="名称"><a href="#名称" class="headerlink" title="名称"></a>名称</h3><pre><code>xdotool  - 命令行X11自动化工具
</code></pre><h3 id="描述"><a href="#描述" class="headerlink" title="描述"></a>描述</h3><pre><code>xdotool允许您以编程方式（或手动）模拟键盘输入和鼠标活动，移动和调整窗口大小等。它使用X11的XTEST扩展和其他Xlib函数来完成此操作。 
</code></pre><a id="more"></a>    
<h3 id="键盘命令"><a href="#键盘命令" class="headerlink" title="键盘命令"></a>键盘命令</h3><pre><code>key [options] keystroke [keystroke ...]
    选项：
    --window window
        将击键发送到特定的窗口ID。

    --clearmodifiers
        在发送击键之前清除修改器。

    --delay milliseconds
        击键之间的延迟。默认值为12毫秒。

    键入给定的击键。例如“alt+r”，“Control_L+J”，“ctrl+alt+n”，“BackSpace”。

    示例：发送按键“F2”
     xdotool key F2

    示例：发送ctrl + l然后将BackSpace作为单独的按键发送：
     xdotool key ctrl+l BackSpace

    示例：将ctrl+c发送到与标题&apos;gdb&apos;匹配的所有窗口
     xdotool search --name gdb key ctrl+c

keydown [options] keystroke
    键盘按下事件。

keyup keystroke
    键盘释放事件。

type [options] something to type
    选项：

    --window windowid
        将击键发送到特定的窗口ID。

    --delay milliseconds
        击键之间的延迟。默认值为12毫秒。

    --clearmodifiers
        在发送击键之前清除修改器。

    示例：输入&apos;Hello world！&apos;：
        xdotool type &apos;Hello world！&apos;
</code></pre><h3 id="鼠标命令"><a href="#鼠标命令" class="headerlink" title="鼠标命令"></a>鼠标命令</h3><pre><code>mousemove [options] x y OR &apos;restore&apos;
    将鼠标移动到屏幕上的特定X和Y坐标。
    如果指定“restore”而不是X和Y坐标，则可以将鼠标移动到上一个位置。只有在之前已在此相同的命令调用中移动时，还原才有效。

    例如，要单击屏幕的左上角并在移动鼠标之前将其移动到原始位置，请使用以下命令：
     xdotool mousemove 0 0 click 1 mousemove restore

     --window WINDOW
        指定要相对移动的窗口。坐标0,0位于您选择的窗口的左上角。

     --screen SCREEN
        将鼠标移动到指定的屏幕。这仅在您有多个屏幕且不使用Xinerama时才有用。

        默认为当前屏幕。如果指定--window，则会忽略--screen标志。

     --polar
        使用极坐标。这使得&apos;x&apos;成为一个角度（以度为单位，0-360等），并使&apos;y&apos;成为距离。

        旋转从&apos;向上&apos;（0度）开始并顺时针旋转：90 =右，180 =向下，270 =向左。

        原点默认为当前屏幕的中心。如果指定--window，则原点是该窗口的中心。

     --clearmodifiers
        见CLEARMODIFIERS

     --sync
        发送鼠标移动请求后，请等待鼠标实际移动。如果不需要移动，我们不会等待。这对于依赖于在继续之前完成的操作的脚本非常有用。

        注意：我们会等到鼠标完全移动，不一定是它实际到达目的地。某些应用程序将鼠标光标锁定到屏幕的某些区域，因此等待任何移动
        在一般情况下比等待特定目标更好。

mousemove_relative [options] x y
    相对于鼠标光标的当前位置移动鼠标x，y像素。

     --polar
     --sync
     --clearmodifiers

click [options] button
    发送一个单击，即mousedown，然后是给定按钮的mouseup，两者之间有一个短暂的延迟（当前为12ms）。

    按钮通常以这种方式映射：单击鼠标1，中间为2，右击鼠标为3，向上轮为4，向下轮为5。

    --clearmodifiers
        单击之前清除修改器。请参阅下面的CLEARMODIFIERS。

    --repeat REPEAT
        指定单击的次数。默认值为1.对于双击，请使用“--repeat 2”

    --delay MILLISECONDS
        指定在两次点击之间延迟的时间（以毫秒为单位）。如果--repeat标志设置为1（默认值），则不使用此选项。

    --window WINDOW
        指定发送单击的窗口。

mousedown [options] button
    与单击相同，但仅发送鼠标按下。

mouseup [options] button
    与单击相同，但仅发送鼠标释放。

getmouselocation [--shell]
    输出鼠标光标的x，y，屏幕和窗口ID。如果您有多个显示器且未使用Xinerama，则屏幕编号将为非零。

     --shell
        这使得getmouselocation输出shell数据可以进行评估。例：

         # xdotool getmouselocation --shell
         X = 880
         Y = 443
         SCREEN = 0
         WINDOW = 16777250

         # eval $（xdotool getmouselocation --shell）
         # echo $ X，$ Y.
         714324

behave_screen_edge [options] where command ...
    当鼠标击中屏幕边缘或角落时，将操作绑定到事件。

    选项包括：

     --delay MILLISECONDS
        运行命令前延迟（以毫秒为单位）。这允许您在命令运行之前要求给定的边或角保持一小段时间。如果您在延迟之前离开边缘或角落
        到期然后时间将重置。

     --quiesce MILLISECONDS
        在下一个命令运行之前的延迟（以毫秒为单位）。这有助于防止意外地多次执行命令;如果你有一个非常短的--delay（如默认值0），这将特别有用。

     事件触发

     *鼠标击中边缘或角落。
     *如果延迟非零，则鼠标必须保持在此边缘或角落，直到延迟时间到期。
     *如果仍在边缘/角落，则触发。
     *如果静止非零，那么下一个是冷静期
       触发器不会发生

    有效的&apos;where&apos;值是：

    left
    top-left
    top
    top-right
    right
    bottom-left
    bottom
    bottom-right


    例子：
     ＃将鼠标移动到左下角时激活google-chrome：
     xdotool behave_screen_edge bottom-left \
       search --class google-chrome windowactivate

     ＃转到下一个工作区（右）。已知在GNOME中工作（metacity和compiz）
     xdotool behave_screen_edge --delay 500 bottom-right key XF86Forward

     ＃激活firefox并在新选项卡中搜索剪贴板中的文本
     xdotool behave_screen_edge  --delay 1000 top-left \
         search --classname Navigator \
         windowactivate --sync key --delay 250 ctrl+t ctrl+k ctrl+v Return
</code></pre><h3 id="窗口命令"><a href="#窗口命令" class="headerlink" title="窗口命令"></a>窗口命令</h3><pre><code>search [options] pattern
    使用正则表达式模式搜索具有标题，名称或类的窗口。

    默认选项为“--name --class --classname”（除非您指定--name --class或--classname中的一个或多个）。

    可用的选项是：

     --class
        与窗口类匹配。

     --classname
        与窗口类名匹配。

    --maxdepth N
        设置递归搜索深度。默认值为-1，表示无限。 0表示没有深度，只搜索根窗口。如果您只想要窗口，请将maxdepth设置为1（或2，具体取决于窗口的方式）。

    --name
        匹配窗口名称。这与窗口标题栏中显示的字符串相同。

    --onlyvisible
        在结果中仅显示可见窗口。这意味着具有地图状态IsViewable的那些。
        默认是模糊匹配，此参数可以精确匹配

    --pid PID
        匹配属于特定进程ID的窗口。这可能不适用于某些未在其窗口上设置此元数据的X应用程序。

    --screen N
        仅在特定屏幕上选择窗口。默认是搜索所有屏幕。仅在您有多个显示器且未使用Xinerama时才有意义。

    --desktop N
        仅匹配特定桌面上的窗口。 &apos;N&apos;是一个数字。默认设置是搜索所有桌面。

    --limit N
        找到N个匹配窗口后停止搜索。如果您只想要一些结果，指定限制将有助于加快搜索速度。

        默认值为无搜索限制（相当于&apos;--limit 0&apos;）

    --all
        要求满足所有条件。例如：

         xdotool search --all --pid 1424 --name &quot;Hello World&quot;

        这将仅匹配具有“Hello World”作为名称并由pid 1424拥有的窗口。

    --any
        匹配符合任何条件的窗口（逻辑上，&apos;or&apos;）。默认情况下处于启用状态。例如：

         xdotool search --any --pid 1424 --name &quot;Hello World&quot;

        这将匹配pid 1424拥有的任何窗口或名称为“Hello World”的窗口

    --sync
        阻止直到有结果。当您启动应用程序并希望等到应用程序窗口可见时，这非常有用。例如：

         google-chrome &amp;
         xdotool search --sync --onlyvisible --class &quot;google-chrome&quot;

selectwindow
    通过单击获取窗口ID（对于客户端）。例如，通过单击它来杀死一个窗口：

     xdotool selectwindow windowkill

behave window action command ...
    将操作绑定到窗口上的事件。这使您可以在匹配事件发生时运行其他xdotool命令。

    以下是有效事件：

    mouse-enter
        鼠标进入窗口时触发。

    mouse-leave
        鼠标离开窗口时触发。

    mouse-click
        单击鼠标时触发。特别是，当释放鼠标按钮时。

    focus
        当窗口获得输入焦点时触发。

    blur
        窗口失去焦点时触发。

    例子：

     ＃只要鼠标进入当前可见的位置，就打印光标位置
     #window：
     xdotool search --onlyvisible . behave %@ mouse-enter getmouselocation

     ＃每当xterm获得焦点时，打印窗口标题和pid
     xdotool search --class xterm behave %@ focus getwindowname getwindowpid

     ＃模拟焦点跟随鼠标
      xdotool search . behave %@ mouse-enter windowfocus

getwindowpid [window]
    输出拥有给定窗口的PID。这需要拥有窗口的应用程序的努力，并且可能不适用于所有窗口。这使用窗口的_NET_WM_PID属性。

    示例：查找所有xterms的PID：
     xdotool search --class xterm getwindowpid ％@

getwindowname [window]
    输出给定窗口的名称，也称为标题。这是窗口管理器在窗口标题栏中显示的文本。

getwindowgeometry [options] [window]
    输出窗口的几何（位置和位置）。值包括：x，y，宽度，高度和屏幕编号。

    --shell
        适合shell中&apos;eval&apos;的输出值。

getwindowfocus [-f]
    打印当前聚焦窗口的窗口ID。

    如果当前窗口没有WM_CLASS属性，我们假设它不是正常的顶级窗口并遍历父节点，直到我们找到一个设置了WM_CLASS的窗口并返回该窗口id。

    如果您确实希望窗口当前具有焦点并且不关心它是否具有WM_CLASS设置，那么请使用&apos;getwindowfocus -f&apos;

windowsize [option] [windows] 宽度 高度
    设置给定窗口的窗口大小。

    百分比对宽度和高度有效。它们与窗口所在屏幕的几何形状有关。例如，要使窗口成为屏幕的整个宽度，但是半高：

     xdotool windowsize I &lt;window&gt; 100％ 50％

    百分比对于--usehints有效，并且仍然是指相对于屏幕大小的像素宽度。

    可用的选项是：

    --usehints
        使用窗口大小提示（如果可用）来设置宽度和高度。这对于基于文本行/列而不是像素设置大小的终端很有用。

    --sync
        发送窗口大小请求后，请等待窗口实际调整大小。如果不需要改变，我们不会等待。这对于依赖于在继续之前完成的操作的脚本非常有用。

        注意：由于许多窗口管理器可能会忽略或更改原始调整大小请求，因此我们将等到大小从原始大小更改，而不是所需大小。

    示例：要将终端设置为80x24，您将使用：
     xdotool windowsize --usehints some_windowid 80 24

windowmove [options] [window] x y
    将窗口移动到给定位置。

    如果给定的x坐标字面上是&apos;x&apos;，那么窗口的当前x位置将保持不变。这同样适用于&apos;y&apos;。

    例子：

     xdotool getactivewindow windowmove 100 100 ＃移动到100,100
     xdotool getactivewindow windowmove x 100   ＃移动到x，100
     xdotool getactivewindow windowmove 100 y   ＃Move to 100，y
     xdotool getactivewindow windowmove 100 y   ＃Move to 100，y

    百分比对宽度和高度有效。它们与窗口所在屏幕的几何形状有关。例如，要使窗口成为屏幕的整个宽度，但是半高：

     xdotool windowmove I&lt;window&gt; 100% 50%

    --sync
        发送窗口移动请求后，请等待窗口实际移动。如果不需要移动，我们不会等待。这对于依赖于在继续之前完成的操作的脚本非常有用。

    --relative
        相对于当前窗口位置进行移动。

windowfocus [options] [window]
    聚焦一个窗口。

    --sync
        发送窗口焦点请求后，请等待窗口实际聚焦。这对于依赖于在继续之前完成的操作的脚本非常有用。

windowmap [options] [window]
    映射一个窗口。在X11术语中，映射窗口意味着使其在屏幕上可见。

    --sync
        请求窗口映射后，请等待窗口实际映射（可见）。这对于依赖于在继续之前完成的操作的脚本非常有用。

windowminimize [options] [window]
    最小化窗口。

    --sync
        请求窗口最小化后，等待窗口实际最小化。这对于依赖于在继续之前完成的操作的脚本非常有用。

windowraise [window_id=%1]
    将窗口提升到堆栈顶部。这可能不适用于所有窗口管理器。如果没有给出窗口，则％1是默认值。

windowreparent [source_window] destination_window
    重新审视一个窗口。这会将source_window移动为destination_window的子窗口。
windowclose [window]
    关闭一个窗口。此操作将关闭窗口，但不会尝试杀死控制它的客户端。

windowkill [window]
    杀了一个窗口。此操作将破坏窗口并终止控制它的客户端。

windowunmap [options] [window_id =%1]
    取消映射窗口，使其不再显示在屏幕上。如果没有给出窗口，则％1是默认值。

    --sync
        请求窗口取消映射后，请等待窗口实际取消映射（隐藏）。这对于依赖于在继续之前完成的操作的脚本非常有用。

set_window [options] [windowid=%1]
    设置有关窗口的属性。如果没有给出窗口，则%1是默认值。

    选项：

    --name newname
        设置窗口WM_NAME（通常是窗口标题）

    --icon-name newiconname
        设置窗口WM_ICON_NAME（通常情况下最小化时的窗口标题）

    --roro newrole
        设置窗口WM_WINDOW_ROLE

    --classname newclassname
        设置窗口类名（不要与窗口类混淆）

    --class newclass
        设置窗口类（不要与窗口类名混淆）

    --urgency value
        设置窗口紧急提示。如果值为1，则窗口将标记为紧急，窗口管理器将以某种方式突出显示该窗口以供用户注意。如果值为0，则窗口将标记为非紧急。

    --overrideredirect value
        设置窗口的override_redirect值。该值是窗口管理器是否应该管理它的提示。如果重定向值为0，则窗口管理器将绘制边框并处理此窗口
        一般。如果值为1，则窗口管理器将忽略此窗口。

        如果更改此值，窗口管理器可能不会注意到更改，直到再次映射窗口，因此您可能需要发出“windowunmap”和“windowmap”以使窗口管理器记下。
</code></pre><h3 id="桌面和窗口命令"><a href="#桌面和窗口命令" class="headerlink" title="桌面和窗口命令"></a>桌面和窗口命令</h3><pre><code>这些命令遵循EWMH标准。有关详细信息，请参阅“扩展窗口管理器提示”部分。

windowactivate [选项] [窗口]
    激活窗口。此命令与windowfocus不同：如果窗口在另一个桌面上，我们将切换到该桌面。它还使用不同的方法来启动窗口。我建议尝试这个
    使用windowfocus之前的命令，因为它将适用于更多的窗口管理器。

    --sync
        发送窗口激活后，请等待窗口实际激活。这对于依赖于在继续之前完成的操作的脚本非常有用。

getactivewindow
    输出当前活动窗口。此命令通常比getwindowfocus更可靠。结果将保存到窗口堆栈中。

set_num_desktops number
    更改桌面或工作区的数量。

get_num_desktops
    输出当前的桌面数量。

get_desktop_viewport [--shell]
    报告当前视口的位置。如果给出了--shell，则输出对shell eval是友好的。

    有时在某些窗口管理器上使用视口而不是“虚拟桌面”。视口只是一个非常大的桌面区域的视图。

set_desktop_viewport x y
    将视口移动到给定位置。并非所有请求都会被遵守 - 某些窗口管理器仅遵循与工作空间边界对齐的请求，例如屏幕大小。

    例如，如果您的屏幕是1280x800，则可以通过执行以下操作移至第二个工作区：
     xdotool set_desktop_viewport 1280 0

set_desktop [options] desktop_number
    将当前视图更改为指定的桌面。

    --relative
        使用相对运动而不是绝对运动。这使您可以相对于当前桌面移动。

get_desktop
    在视图中输出当前桌面。

set_desktop_for_window [window] desktop_number
    将窗口移动到其他桌面。如果没有给出窗口，则％1是默认值。有关详细信息，请参阅“窗口堆栈”和“命令链”。

get_desktop_for_window [窗口]
    输出当前包含给定窗口的桌面。将窗口移动到其他桌面。如果没有给出窗口，则％1是默认值。有关详细信息，请参见WINDOW STACK和“COMMAND CHAINING”。
</code></pre><h3 id="其他命令"><a href="#其他命令" class="headerlink" title="其他命令"></a>其他命令</h3><pre><code>exec [options] command [...]
    执行一个程序。当与behave_screen_edge结合使用以锁定屏幕等操作时，这通常很有用。

    选项：

    --sync
        阻止子进程退出。然后将子进程退出状态传递给复制它的父进程（xdotool）。

    例子：
     ＃当鼠标位于右上角时锁定屏幕
     xdotool behave_screen_edge --delay 1000 top-right \
       exec gnome-screensaver-command --lock
     ＃如果您使用该程序，请替换&apos;xscreensaver-command -lock&apos;。

     ＃以下将无法移动鼠标，因为我们使用&apos;--sync&apos;和
     ＃/bin/false退出非零：
     xdotool exec --sync /bin/false mousemove 0 0

     ＃不在exec命令上使用--sync。
     xdotool exec /bin/false mousemove 0 0

sleep seconds
    停一段时间。在这里，秒的分数（如1.3或0.4）是有效的。
</code></pre><h3 id="SCRIPTS"><a href="#SCRIPTS" class="headerlink" title="SCRIPTS"></a>SCRIPTS</h3><pre><code>如果需要，xdotool可以通过stdin或文件读取命令列表。任何命令失败时脚本都将失败。

脚本可以使用位置参数（由$ 1，$ 2，...表示）和环境变量（如$ HOME或$ WINDOWID）。

从文件中读取命令：

     xdotool 文件名

从stdin读取命令：

     xdotool -

从重定向文件中读取命令

     xdotool - &lt; myfile

您还可以编写仅执行xdotool的脚本。例：

 #!/usr/local/bin/xdotool
 search --onlyvisible --classname $1

 windowsize %@ $2 $3
 windowraise %@

 windowmove %1 0 0
 windowmove %2 $2 0
 windowmove %3 0 $3
 windowmove %4 $2 $3

此脚本将使所有与arg1（$1）给出的classname查询匹配的窗口和size 将它们移动到2x2网格中，窗口的大小由第2和第3个参数决定。

这是一个示例用法：

# ./myscript xterm 600 400

像这样运行将需要4个可见的xterms，提升它们，并将它们移动到2x2平铺网格中，每个窗口大小为600x400像素。
</code></pre><h3 id="CLEARMODIFIERS"><a href="#CLEARMODIFIERS" class="headerlink" title="CLEARMODIFIERS"></a>CLEARMODIFIERS</h3><pre><code>任何带有--clearmodifiers标志的命令都会尝试在命令期间清除任何活动的输入修饰符，然后再恢复它们。

例如，如果您要运行此命令：
 xdotool key a

结果将是&apos;a&apos;或&apos;A&apos;，具体取决于您是否按住键盘上的shift键。通常不希望任何修饰符处于活动状态，因此您可以告诉xdotool清除任何活动修饰符。

运行&apos;xdotool key --clearmodifiers a&apos;时保持shift的操作顺序是这样的：

1.查询所有活动修饰符（在这种情况下查找shift）
2.尝试通过为shift键发送&apos;key up&apos;来清除班次
3.运行正常的&apos;xdotool key a&apos;
4.通过发送&apos;&apos;key down&apos;进行移位来恢复移位键

--clearmodifiers标志目前可以清除以下内容：

·活动键映射中具有与之关联的修饰符的任何键。 （参见xmodmap（1）的&apos;xmodmap -pm&apos;输出）

·鼠标按键（1,2,3,4和5）

·大写锁定
</code></pre><p>xprop<br>xwininfo</p>

      
       <hr><span style="font-style: italic;color: gray;"> 转载请注明来源，欢迎对文章中的引用来源进行考证，欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论，也可以邮件至 jh_jiahan@163.com </span>
    </div>
</article>


<p>
    <a href="javascript:void(0)" class="dashang" onclick="dashangToggle()">赏</a>
</p>


<div class="article_copyright">
    <p><span class="copy-title">文章标题:</span>Linux下按键精灵xdotool</p>
    
    <p><span class="copy-title">本文作者:</span><a href="javascript:void(0)" title="Jia Han">Jia Han</a></p>
    <p><span class="copy-title">发布时间:</span>2019-03-21, 16:57:46</p>
    <p><span class="copy-title">最后更新:</span>2019-11-12, 10:21:04</p>
    <span class="copy-title">原始链接:</span><a class="post-url" href="/jia_han/2019/03/21/xdotool/" title="Linux下按键精灵xdotool">https://jia_han.gitee.io/2019/03/21/xdotool/</a>
    <p>
        <span class="copy-title">版权声明:</span><i class="fa fa-creative-commons"></i> <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/" title="CC BY-NC-SA 4.0 International" target="_blank">"署名-非商用-相同方式共享 4.0"</a> 转载请保留原文链接及作者。
    </p>
</div>





    




    </div>
    <div class="copyright">
        <p class="footer-entry">©2019-2021 JH</p>
<p class="footer-entry">Built with <a href="https://hexo.io/" target="_blank">Hexo</a> and <a href="https://github.com/yelog/hexo-theme-3-hexo" target="_blank">3-hexo</a> theme</p>

    </div>
    <div class="full-toc">
        <button class="full"><span class="min "></span></button>
<button class="post-toc-menu"><span class="post-toc-menu-icons"></span></button>
<div class="post-toc"><span class="post-toc-title">目录</span>
    <div class="post-toc-content">

    </div>
</div>
<a class id="rocket" href="javascript:void(0)"></a>
    </div>
</div>
<div class="acParent"></div>

<div class="hide_box" onclick="dashangToggle()"></div>
<div class="shang_box">
    <a class="shang_close" href="javascript:void(0)" onclick="dashangToggle()">×</a>
    <div class="shang_tit">
        <p>喜欢就点赞,疼爱就打赏</p>
    </div>
    <div class="shang_payimg">
        <div class="pay_img">
            <img src="/img/alipay.jpg" class="alipay" title="扫码支持">
            <img src="/img/weixin.jpg" class="weixin" title="扫码支持">
        </div>
    </div>
    <div class="shang_payselect">
        <span><label><input type="radio" name="pay" checked value="alipay">支付宝</label></span><span><label><input type="radio" name="pay" value="weixin">微信</label></span>
    </div>
</div>


</body>
<script src="/js/jquery.pjax.js?v=1.0.1"></script>

<script src="/js/script.js?v=1.0.1"></script>
<script>
    var img_resize = 'default';
    /*作者、标签的自动补全*/
    $(function () {
        $('.search').AutoComplete({
            'data': ['#Linux','#xdotool',],
            'itemHeight': 20,
            'width': 418
        }).AutoComplete('show');
    })
    function initArticle() {
        /*渲染对应的表格样式*/
        
            $(".post .pjax table").addClass("green_title");
        

        /*渲染打赏样式*/
        
        $("input[name=pay]").on("click", function () {
            if($("input[name=pay]:checked").val()=="weixin"){
                $(".shang_box .shang_payimg .pay_img").addClass("weixin_img");
            } else {
                $(".shang_box .shang_payimg .pay_img").removeClass("weixin_img");
            }
        })
        

        /*高亮代码块行号*/
        
        $('pre code').each(function(){
            var lines = $(this).text().split('\n').length - 1, widther='';
            if (lines>99) {
                widther = 'widther'
            }
            var $numbering = $('<ul/>').addClass('pre-numbering ' + widther).attr("unselectable","on");
            $(this).addClass('has-numbering ' + widther)
                    .parent()
                    .append($numbering);
            for(var i=1;i<=lines;i++){
                $numbering.append($('<li/>').text(i));
            }
        });
        

        /*访问数量*/
        
        $.getScript("//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js");
        

        /*代码高亮，行号对齐*/
        $('.pre-numbering').css('line-height',$('.has-numbering').css('line-height'));

        
    }

    /*打赏页面隐藏与展示*/
    
    function dashangToggle() {
        $(".shang_box").fadeToggle();
        $(".hide_box").fadeToggle();
    }
    

</script>

<!--加入行号的高亮代码块样式-->

<style>
    pre{
        position: relative;
        margin-bottom: 24px;
        border-radius: 10px;
        border: 1px solid #e2dede;
        background: #FFF;
        overflow: hidden;
    }
    code.has-numbering{
        margin-left: 30px;
    }
    code.has-numbering.widther{
        margin-left: 35px;
    }
    .pre-numbering{
        margin: 0px;
        position: absolute;
        top: 0;
        left: 0;
        width: 20px;
        padding: 0.5em 3px 0.7em 5px;
        border-right: 1px solid #C3CCD0;
        text-align: right;
        color: #AAA;
        background-color: #fafafa;
    }
    .pre-numbering.widther {
        width: 35px;
    }
</style>

<!--自定义样式设置-->
<style>
    
    
    .nav {
        width: 542px;
    }
    .nav.fullscreen {
        margin-left: -542px;
    }
    .nav-left {
        width: 120px;
    }
    
    
    @media screen and (max-width: 1468px) {
        .nav {
            width: 492px;
        }
        .nav.fullscreen {
            margin-left: -492px;
        }
        .nav-left {
            width: 100px;
        }
    }
    
    
    @media screen and (max-width: 1024px) {
        .nav {
            width: 492px;
            margin-left: -492px
        }
        .nav.fullscreen {
            margin-left: 0;
        }
        .nav .hide-list.fullscreen {
            left: 492px
        }
    }
    
    @media screen and (max-width: 426px) {
        .nav {
            width: 100%;
        }
        .nav-left {
            width: 100%;
        }
    }
    
    
    .nav-right .title-list nav a .post-title, .nav-right .title-list #local-search-result a .post-title {
        color: #383636;
    }
    
    
    .nav-right .title-list nav a .post-date, .nav-right .title-list #local-search-result a .post-date {
        color: #5e5e5f;
    }
    
    
    .nav-right nav a.hover, #local-search-result a.hover{
        background-color: #e2e0e0;
    }
    
    

    /*列表样式*/
    
    .post .pjax article .article-entry>ol, .post .pjax article .article-entry>ul, .post .pjax article>ol, .post .pjax article>ul{
        border: #e2dede solid 1px;
        border-radius: 10px;
        padding: 10px 32px 10px 56px;
    }
    .post .pjax article .article-entry li>ol, .post .pjax article .article-entry li>ul,.post .pjax article li>ol, .post .pjax article li>ul{
        padding-top: 5px;
        padding-bottom: 5px;
    }
    .post .pjax article .article-entry>ol>li, .post .pjax article .article-entry>ul>li,.post .pjax article>ol>li, .post .pjax article>ul>li{
        margin-bottom: auto;
        margin-left: auto;
    }
    .post .pjax article .article-entry li>ol>li, .post .pjax article .article-entry li>ul>li,.post .pjax article li>ol>li, .post .pjax article li>ul>li{
        margin-bottom: auto;
        margin-left: auto;
    }
    

    /* 背景图样式 */
    
    


    /*引用块样式*/
    

    /*文章列表背景图*/
    
    .nav-right:before {
        content: ' ';
        display: block;
        position: absolute;
        left: 0;
        top: 0;
        width: 100%;
        height: 100%;
        opacity: 0.3;
        background: url("https://i.loli.net/2019/07/22/5d3521411f3f169375.png");
        background-repeat: no-repeat;
        background-position: 50% 0;
        -ms-background-size: cover;
        -o-background-size: cover;
        -moz-background-size: cover;
        -webkit-background-size: cover;
        background-size: cover;
    }
    

    
</style>







</html>
